package com.cloudcc.cloudframe.util;

import java.lang.reflect.Type;
import java.util.List;

import com.google.gson.Gson;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;

public class GsonUtil {

	/**
	 * 解析json集合
	 * 
	 * @param jsonStr
	 * @param type
	 *            type
	 * @return
	 */
	public static <T> List<T> json2List(String jsonStr, Type type)
			throws com.google.gson.JsonSyntaxException {
		Gson gson = new Gson();
		return gson.fromJson(jsonStr, type);
	}

	/**
	 * 转换
	 * 
	 * @param jsonStr
	 * @param bean
	 * @return
	 * @throws com.google.gson.JsonSyntaxException
	 */
	public static <T> T json2Bean(String jsonStr, Class<T> bean)
			throws com.google.gson.JsonSyntaxException {
		Gson gson = new Gson();
		T t = gson.fromJson(jsonStr, bean);
		return t;
	}

	/**
	 * 对象转成 json
	 * 
	 * @param object
	 * @return
	 */
	public static String Object2Json(Object object) {
		String obj = StringUtils.EMPTY;
		Gson gson = new Gson();
		obj = gson.toJson(object).toString();
		return obj;
	}

	public static <T> void commitList(String key, List<T> list) {

		// MyPreferencePlugin.commitString(key, json);
	}

	/**
	 * 将list数据转换成json
	 * 
	 * @param list
	 * @return
	 */
	public static <T> String List2Json(List<T> list) {
		return new Gson().toJson(list);
	}

	/**
	 * Bean 类型转换
	 * 
	 * @param src
	 * @param dest
	 * @return
	 */
	public static <T> T covertBean(Object src, Class<T> dest) {
		try {
			T json2Bean = json2Bean(Object2Json(src), dest);
			return json2Bean;
		} catch (com.google.gson.JsonSyntaxException e) {
			return null;
		}

	}

	public static <T> List<T> covertList(Object src, Type type) {
		Gson gson = new Gson();
		try {
			String json = gson.toJson(src);
			List<T> json2List = json2List(json, type);
			return json2List;
		} catch (com.google.gson.JsonSyntaxException e) {
			return null;
		}

	}

	public static <T> List<T> getList(String string, Type type) {
		try {
			List<T> list = json2List(string, type);
			return list;
		} catch (com.google.gson.JsonSyntaxException e) {
			return null;
		}
	}

	/**
	 * 从 jsonobject中获得string 默认值 为""
	 * 
	 * @param key
	 * @param json
	 * @return
	 */
	public static String getStringByJson(String key, JsonObject json) {
		return getStringByJson(key, json, "");
	}

	/**
	 * 从 JsonObject 中获得 String字符
	 * 
	 * @param key
	 * @param json
	 * @param defaultString
	 *            获取失败的默认值
	 * @return
	 */
	public static String getStringByJson(String key, JsonObject json,
			String defaultString) {
		JsonElement jsonElement = getJsonElement(key, json);
		if (jsonElement == null || jsonElement.isJsonNull())
			return defaultString;
		return jsonElement.getAsString();
	}

	/**
	 * 得到 jsonelement
	 * 
	 * @param key
	 * @param json
	 * @return
	 */
	public static JsonElement getJsonElement(String key, JsonObject json) {
		return json.get(key);
	}

}
